[TAPDISK] Fix qcow initialization bug.
authorJake Wires <jwires@xensource.com>
Tue, 10 Apr 2007 18:40:43 +0000 (11:40 -0700)
committerJake Wires <jwires@xensource.com>
Tue, 10 Apr 2007 18:40:43 +0000 (11:40 -0700)
fd_end was being incorrectly initialized upon open, leading to data corruption.

Signed-off-by: Jake Wires <jwires@xensource.com>
tools/blktap/drivers/block-qcow.c

index b0822f729df9f46115969fa0f5fde834ec8c747a..2e5532a7cb6f35b4b50d034170ffec4865a5d79b 100644 (file)
@@ -949,8 +949,14 @@ int tdqcow_open (struct disk_driver *dd, const char *name, td_flag_t flags)
                goto fail;
        }
        init_fds(dd);
-       s->fd_end = (final_cluster == 0 ? (s->l1_table_offset + l1_table_size) : 
-                               (final_cluster + s->cluster_size));
+
+       if (!final_cluster)
+               s->fd_end = s->l1_table_offset + l1_table_size;
+       else {
+               s->fd_end = lseek64(fd, 0, SEEK_END);
+               if (s->fd_end == (off64_t)-1)
+                       goto fail;
+       }
 
        return 0;